/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 17655
 * Date: 2025-02-14
 * Time: 14:59
 */
public class test2 {
    /**
     * LeetCode 43 字符串相乘
     */

    // 解题思路：

    /**
     * 利用竖式乘法，将num1的每一位数字和num2的数字相乘，然后再进行字符串的拼接
     * @param num1
     * @param num2
     * @return
     */

    public String multiply(String num1, String num2) {
        // 存在0的情况
        if(num1.equals("0") || num2.equals("0")){
            return "0";
        }
        String res = "0";
        // 逐个相乘
        for(int i=num2.length()-1;i>=0;i--){
            // 用于判断进位
            int carry = 0;
            // 保存结果
            StringBuilder tmp = new StringBuilder();
            // 判断需要在计算结果之后补多少个零，乘十位或者百位的时候需要在后面补零
            for(int j=0;j<num2.length()-1-i;j++){
                tmp.append(0);
            }
            int n2 = num2.charAt(i)-'0';
            // 使用num1的各个数字和num2的i相乘
            for(int j=num1.length()-1;j>=0 || carry!=0;j--){
                int n1 = j<0?0:num1.charAt(j)-'0';
                int p = (n1*n2+carry)%10;
                tmp.append(p);
                carry = (n1*n2+carry)/10;
            }
            res = addStrings(res,tmp.reverse().toString());
        }
        return res;
    }

    public String addStrings(String num1,String num2){
        StringBuilder sb = new StringBuilder();
        int carry=0;
        for(int i=num1.length()-1,j=num2.length()-1;i>=0||j>=0||carry!=0;i--,j--){
            int x = i<0?0:num1.charAt(i)-'0';
            int y = j<0?0:num2.charAt(j)-'0';
            int sum = (x+y+carry)%10;
            sb.append(sum);
            carry = (x+y+carry)/10;
        }
        return sb.reverse().toString();
    }
}
